ReportHook {
	var <>rawHook;
	var <>elementHook;
	var <>columnHook;
	var <>state;

	*new { | raw, col, ele, st |
		^super.new.init( raw, col, ele, st );
	}

	init { | raw, col, ele, st |
		rawHook = raw ? {};
		columnHook = col ? {};
		elementHook = ele ? {};
		state = IdentityDictionary( proto: st ? () );
	}

	raw { | x |
		rawHook.( x, state );
	}

	col { | x, i |
		columnHook.( x, i, state );
	}

	ele { | x, i, j |
		elementHook.( x, i, j, state );
	}

	put { | where, what |
		state.put( where, what );
	}
}
